home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 54809 / 54809.xpi / chrome / dictCheck-0.0.6.005.jar / content / iframeInfoDialog.js < prev    next >
Text File  |  2010-02-14  |  27KB  |  739 lines

  1. // encoding='UTF-8'
  2.  
  3. /*
  4.     # Autor : Krzysztof Slawinski
  5.     # Description : window for displaying text messages
  6. */
  7.  
  8.  
  9. if(!com) var com={};
  10. if(!com.ksla) com.ksla={};
  11.  
  12.  
  13. com.ksla.iframe = function(){
  14.  
  15.     // initiate variable from libs
  16.     var dumpd = com.ksla.libs.dumpd;
  17.     var dumpi = com.ksla.libs.dumpi;
  18.     var dumpw = com.ksla.libs.dumpw;
  19.     var dumpe = com.ksla.libs.dumpe;
  20.     var trim  = com.ksla.libs.trim;
  21.  
  22.     /**
  23.      * window instance 
  24.      * @type Window
  25.      */
  26.     var w;
  27.     var selectedWord;
  28.     var http_request = null;
  29.     
  30.     /**
  31.      * Message to show
  32.      * @type 
  33.      */
  34.     var msg;
  35.     var response;
  36.     var iframe;
  37.     
  38.     var xPointOfNote, yPointOfNote, widthOfNote, heightOfNote;
  39.     
  40.     var extFolder = null;
  41.     var dictCheckTMPfile = null;
  42.     const DICTCHECK_TMP_FILENAME = "tmp2.html";
  43.     
  44.     const WIND_TO_BE_OPENED='chrome://dictcheck/content/iframeInfoDialog.xul';
  45.     const WIND_ID='myIFrameInfoDialogWindow';
  46.     const WIND_NAME='my_iframe_info_dialog';
  47.     const CONTENT_AREA_ID='myIFrameArea';
  48.     const WORD_SEARCH_AREA_ID='wordSearchArea';
  49.     
  50.     const WINDOW_WIDTH = 300;
  51.     const WINDOW_HEIGHT = 300;
  52.     const MIN_WINDOW_WIDTH = 170;
  53.     const MIN_WINDOW_HEIGHT = 80;
  54.     
  55.     const URL_ADDRESS = 'http://www.angool.com/search/index.php?query=';
  56.     const iframeBody_csslink = "<link rel='stylesheet' type='text/css' href='chrome://dictcheck/skin/iframeBody.css'/>";
  57.     const iframeBody_footer1 = "<span id='footer1'><p><center>Translated with <b>Angool.com</b></center></span>";
  58.     const iframeBody_footer2 = "<span id='footer2'><center>dictCheck made by ksla</center><p></span>";
  59.     
  60.     //const iframeBody_footer2 = "<span id='footer2'><center><a href='http://ksla.cba.pl' >dictCheck made by <b>ksla</b></a></center><p></span>";
  61.     
  62.     //onclick='com.ksla.libs.runInFirefox(http://ksla.cba.pl)'
  63.     
  64.     const TEST = 
  65.     '<html> <head> <title>Strona testowa</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>SDFSADFAF </body> </html>';
  66.  
  67.  
  68.     const inner_style = '<style type="text/css">\
  69. #footer1, #footer1 a\
  70. {\
  71.     font-size: 10px;\
  72.     color: red;\
  73. }\
  74. \
  75. #footer1 p\
  76. {\
  77.     margin: 0px;\
  78.     margin-top: 20px;\
  79. }\
  80. \
  81. #footer2, #footer2 a\
  82. {\
  83.     color: blue;\
  84.     font-size: 12px ;\
  85. }\
  86. \
  87. #footer2 p\
  88. {\
  89.     margin-bottom: 30px;\
  90. }\
  91. </style>';
  92.  
  93.  
  94.  
  95.     /**
  96.      * function opening my text info dialog
  97.      * Once this function is called openedWindow won't be loaded yet 
  98.      * and getElementsById might not work!
  99.      * We must get the handler to window during 'onLoad'
  100.      */
  101.     function openMyIFrameInfoDialog(selWord,message,resp){
  102.         dumpi('start->openMyIFrameInfoDialog()');
  103.         w=window.openDialog
  104.             (
  105.                 WIND_TO_BE_OPENED
  106.                 ,WIND_NAME
  107.                 ,'chrome=yes,dependent=yes,resizable=yes,modal=no,centerscreen'
  108.                 ,selWord,message,resp
  109.                 
  110.         );      
  111.     };
  112.  
  113.  
  114.    function modifyMyWindow(){
  115.         dumpi('start->modifyMyWindow()');
  116.     
  117.         if(w==null){
  118.             dumpi('window "w" == null');
  119.         }
  120.         else {
  121.             dumpi('window "w" was initialized as global');
  122.         }
  123.         // read window arguments
  124.         if("arguments" in w && w.arguments.length > 0) {        
  125.             msg = w.arguments[1];
  126.             response = w.arguments[2];
  127.             setIFrameContent(msg);
  128.         }
  129.         w.document.getElementById(WORD_SEARCH_AREA_ID).focus();
  130.     //  setText('jazda');    
  131.         dumpi('sssss');
  132.     //  dumpi('resp_msg='+response);
  133.     //  listElementsOfDocument(w.document);
  134.         
  135.         w.onload = windowInitUI;
  136.     };
  137.  
  138.     /**
  139.      * This function works only with the <textbox> so it cannot be used
  140.      * for iFrame based dialog window
  141.      * @param {} txt
  142.      * @return {Boolean}
  143.      */
  144.     function setText(txt){
  145.         dumpi('start->setText()');
  146.         var txtbox = null;
  147.         try {
  148.             txtbox = w.document.getElementById(CONTENT_AREA_ID);
  149.         }
  150.         catch (err) {
  151.             dumpe('Exception - Error!!!');
  152.         }
  153.         if (txtbox == null) {
  154.             dumpe('textbox id=['+CONTENT_AREA_ID+'] cannot be found in the document!');
  155.             return false;
  156.         }
  157.         txtbox.value=txt;
  158.         return true;
  159.     };
  160.  
  161.     function myAlertDOMloaded(){
  162.     //  alert('DOM Content loaded');
  163.     //  contDoc.body.innerHTML = "";
  164.         var contDoc = iframe.contentDocument;
  165.     //  listElementsOfDocument(contDoc);
  166.         
  167.         var list = contDoc.getElementsByTagName('tr');  
  168.         dumpi('---Elements of ['+contDoc.nodeName+']');
  169.         var a = [];
  170.         var re = new RegExp('angool_row*');
  171.         for (var i=0; i<list.length;i++){
  172.     //      dumpi('el='+list[i].tagName+' id='+list[i].id + 'classn=' + list[i].className);
  173.             if(re.test(list[i].className)) a.push(list[i]);
  174.         }
  175.         dumpi('array "a" has '+ a.length +' elements');
  176.     //  var tempInnerHTML = contDoc.body.innerHTML;
  177.         contDoc.body.innerHTML = "";
  178.         if(!checkIfWordDefinitionFound(a)){ 
  179.             //makes new request for 
  180.             if(!proposeAlternateWord()){
  181.     //          contDoc.body.innerHTML = tempInnerHTML;
  182.                 contDoc.body.innerHTML += "Brak znalezionych definicji s┼éowa.";
  183.             }
  184.             return;
  185.         }
  186.         else {
  187.             var newTABLE = contDoc.createElement("table");
  188.             for (var i=0; i<a.length; i++){
  189.                 newTABLE.appendChild(a[i]);
  190.             }
  191.             contDoc.body.appendChild(newTABLE);     
  192.         }
  193.         
  194.     //  contDoc.body.innerHTML += iframeBody_csslink + iframeBody_footer1 + iframeBody_footer2;
  195.         contDoc.body.innerHTML += inner_style + iframeBody_footer1 + iframeBody_footer2;
  196.         
  197.         dumpi("HTMLcontent="+contDoc.body.innerHTML);
  198.     //  var link = contDoc.createElement("a");
  199.     //  link.setAttribute("id", "link_ang");
  200.     //  link.setAttribute("href", "http://angool.com");
  201.     //  link.textContent = "Translated with Angool.com";
  202.     //  contDoc.body.appendChild(link);
  203.     };
  204.  
  205.  
  206.     function checkIfWordDefinitionFound(lst){   
  207.     //  dumpi('lst length= '+lst.length);
  208.         if(lst.length == 1 && lst[0].childNodes.length != null){
  209.     //      dumpi('length=='+lst[0].childNodes.length)
  210.             var tdlist = lst[0].getElementsByTagName('td');
  211.             var data ;
  212.             if (tdlist != null) {
  213.     //          dumpi('td != null');
  214.     //          dumpi('td length=' + tdlist.length);
  215.                 dumpi('data==['+tdlist[0].textContent+']');
  216.                 data = tdlist[0].textContent;
  217.                 var re = new RegExp('.*Brak znalezionych.*');
  218.                 if (re.test(data)) {
  219.                     dumpi('nie ma definicji');
  220.                     return false;
  221.                 }               
  222.             }
  223.         }
  224.         return true;
  225.     }
  226.     
  227.     function proposeAlternateWord(){
  228.         dumpi('proposing alternate word');
  229.     //  dumpi('word=='+word);
  230.     //  dumpi('selectedWord=='+selectedWord);
  231.         dumpi('w.arg[0]='+w.arguments[0]);
  232.         if(selectedWord==null){
  233.             selectedWord = w.arguments[0];
  234.         }
  235.         dumpi('selectedWord=='+selectedWord);
  236.         var re = null;
  237.         re = new RegExp('ies$|ied$');
  238.         if(re.test(selectedWord)){
  239.             selectedWord = selectedWord.substring(0,selectedWord.length-3);
  240.             selectedWord = selectedWord.concat('y');
  241.             dumpi('selectedWord after modif = '+ selectedWord);
  242.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  243.             return true
  244.         }
  245.         re = new RegExp('lling$|tting$');
  246.         if(re.test(selectedWord)){
  247.             selectedWord = selectedWord.substring(0,selectedWord.length-4);     
  248.             dumpi('selectedWord after modif = '+ selectedWord);
  249.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  250.             return true
  251.         }
  252.         re = new RegExp('ing$');
  253.         if(re.test(selectedWord)){
  254.             selectedWord = selectedWord.substring(0,selectedWord.length-3);     
  255.             dumpi('selectedWord after modif = '+ selectedWord);
  256.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  257.             return true
  258.         }
  259.         re = new RegExp('s$');  
  260.         if(re.test(selectedWord)){
  261.             dumpi('word ends with "s"');
  262.             selectedWord = selectedWord.substring(0,selectedWord.length-1);
  263.             dumpi('selectedWord after modif = '+ selectedWord);
  264.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  265.             return true
  266.         }
  267.         re = new RegExp('ed$'); 
  268.         if(re.test(selectedWord)){      
  269.             selectedWord = selectedWord.substring(0,selectedWord.length-1);     
  270.             dumpi('selectedWord after modif = '+ selectedWord);
  271.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  272.             return true
  273.         }
  274.         re = new RegExp('e$');  
  275.         if(re.test(selectedWord)){      
  276.             selectedWord = selectedWord.substring(0,selectedWord.length-1);     
  277.             dumpi('selectedWord after modif = '+ selectedWord);
  278.             makeDCRequest(URL_ADDRESS + selectedWord,'');
  279.             return true
  280.         }   
  281.         return false;
  282.     }
  283.     
  284.     function getElementsByClassName(classname, node) {   
  285.         if(!node) node = document.getElementsByTagName("body")[0];   
  286.         var a = [];   
  287.         var re = new RegExp('\\b' + classname + '\\b');   
  288.         var els = node.getElementsByTagName("*");   
  289.         for(var i=0,j=els.length; i<j; i++){   
  290.           if(re.test(els[i].className))a.push(els[i]);
  291.         }
  292.         return a;
  293.     }
  294.     
  295.     /**
  296.      * Fills IFrameContent with resopnse from URL site (which is supposed to be definition of word)
  297.      * @param {} txt
  298.      * @return {Boolean}
  299.      */
  300.     function setIFrameContent(txt){
  301.         dumpi('start->setIFrameContent()');
  302.         dumpi('txt='+txt);
  303.         dumpi('msg='+msg);
  304.     //  dumpi('response='+response);    
  305.         iframe = null;
  306.         try {
  307.             iframe = w.document.getElementById(CONTENT_AREA_ID);
  308.         }
  309.         catch (err) {
  310.             dumpe('Exception - Error!!!');
  311.         }
  312.         if (iframe == null) {
  313.             dumpe('iframe id=['+CONTENT_AREA_ID+'] cannot be found in the document!');
  314.             return false;
  315.         }
  316.     //  iframe.src = "http://google.pl";
  317.         dumpi('selectedWord='+selectedWord);
  318.         
  319.         try {
  320.             if (iframe.addEventListener)
  321.             {
  322.                 //register the onload event handler for the window
  323.     //            iframe.removeEventListener ("DOMContentLoaded", alert(), true);
  324.                 iframe.addEventListener ("DOMContentLoaded", myAlertDOMloaded, true);
  325.             }
  326.         }
  327.         catch(ex) {
  328.             dumpe('Exception caught when setting eventListener for iframe');
  329.         }
  330.         dumpi('file path='+dictCheckTMPfile.path);
  331.         iframe.setAttribute('src','file:///'+dictCheckTMPfile.path);
  332.         
  333.         
  334.         var contDoc = iframe.contentDocument;
  335.     //  contDoc.body.innerHTML = response;
  336.     //  dumpi('iframe:');
  337.     //  listElementsOfDocument(iframe);
  338.     //  cleanHtml();
  339.         return true;    
  340.     }
  341.     
  342.     function cleanHtml(){
  343.         dumpi('start->cleanHtml()');
  344.         var el1= document.getElementById('dc_2');
  345.         if (el1 == null) {
  346.             dumpe('el1 == null !!');
  347.         }
  348.         else {
  349.             dumpi('nodeName='+el1.nodeName);    
  350.         }
  351.         
  352.     }
  353.     
  354.     function myGetElementById(elemId, doc)
  355.     {
  356.         if (doc == null)
  357.             return document.getElementById(elemId);
  358.         else
  359.             return doc.getElementById(elemId);
  360.     }
  361.     
  362.     function windowInitUI()
  363.     {
  364.     }
  365.     
  366.     function showMyAbout(e){
  367.         window.openDialog
  368.             (
  369.                 'chrome://dictcheck/content/aboutMeDialog.xul'
  370.                 ,"AboutMeDialog_name"
  371.                 ,'chrome=yes,dependent=yes,resizable=no,modal=no,centerscreen'
  372.         );
  373.     }
  374.     
  375.     /** 
  376.      * 
  377.      */
  378.     function startResizingMyInfoDialog(e)
  379.     {
  380.         if (e.button==0)
  381.         {
  382.             dumpi('button_0->startResizingMyInfoDialog');
  383.             xPointOfNote = e.screenX;
  384.             widthOfNote = w.document.width;
  385.             yPointOfNote = e.screenY;
  386.             heightOfNote = w.document.height;
  387.             //~ dumpd(" xPointOfNote="+xPointOfNote+" ; yPointOfNote="+yPointOfNote);
  388.             w.addEventListener("mousemove", resizeNote, true);
  389.             w.addEventListener("mouseup", stopResizingNote, true);
  390.         }
  391.     }
  392.     
  393.     /** 
  394.      * 
  395.      */
  396.     function stopResizingNote(e)
  397.     {
  398.         w.removeEventListener("mousemove", resizeNote, true);
  399.         w.removeEventListener("mouseup", stopResizingNote, true);
  400.         w.document.getElementById(WORD_SEARCH_AREA_ID).focus();
  401.     }
  402.  
  403.     /**
  404.      * 
  405.      */
  406.     function resizeNote(e)
  407.     {
  408.     //  dumpd(" w.document.width="+window.document.width+" ; w.document.height="+window.document.height);
  409.         var newWidth = widthOfNote + e.screenX - xPointOfNote;
  410.         var newHeight = heightOfNote + e.screenY - yPointOfNote;
  411.         newWidth = newWidth<MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH : newWidth;
  412.         newHeight = newHeight<MIN_WINDOW_HEIGHT ? MIN_WINDOW_HEIGHT : newHeight;
  413.         w.resizeTo(newWidth,newHeight);
  414.     }
  415.     
  416.     /**
  417.      * This method is executed immediately after user double clicks on word.
  418.      * It starts makeDCRequest(..)
  419.      */
  420.     function getSelectedTextAndOpenWindow(e){
  421.             //get the selected string from the active window
  422.         var focusedWindow = new XPCNativeWrapper(document.commandDispatcher.focusedWindow, 'document', 'getSelection()');
  423.         selectedWord = focusedWindow.getSelection().toString();    
  424.         selectedWord = (trim(selectedWord)).toLowerCase();
  425.         if(selectedWord == ""){
  426.             return;
  427.         }
  428.         selectedWord = com.ksla.libs.escapeToLatin1(selectedWord);
  429.         dumpi('word trimmed:'+trim(selectedWord));
  430.         
  431.         //Executing the asynchronous request
  432.         makeDCRequest(URL_ADDRESS + selectedWord,'');
  433.     //  openMyTextInfoDialog(selectedWord);
  434.     }
  435.     
  436.     function getSelectedTextAndOpenWindowForFF(e){
  437.             //get the selected string from the active window
  438.         var focusedWindow = new XPCNativeWrapper(document.commandDispatcher.focusedWindow, 'document', 'getSelection()');
  439.         selectedWord = focusedWindow.getSelection().toString();    
  440.         selectedWord = (trim(selectedWord)).toLowerCase(); 
  441.         if(selectedWord == ""){
  442.             return;
  443.         }
  444.         selectedWord = com.ksla.libs.escapeToLatin1(selectedWord);
  445.     //  dumpi('trimmed:'+trim(selectedWord));
  446.         makeDCRequest(URL_ADDRESS + selectedWord,'');
  447.     //  openMyTextInfoDialog(selectedWord);
  448.     }
  449.     
  450.     function searchForNewWord(e){   
  451.         var word_search_area = w.document.getElementById(WORD_SEARCH_AREA_ID);
  452.         selectedWord = trim(word_search_area.value);   
  453.         selectedWord = com.ksla.libs.escapeToLatin1(selectedWord);
  454.     //  alert(selectedWord);
  455.     //  dumpi('selected word from search bar: ' + selectedWord);
  456.         makeDCRequest(URL_ADDRESS + selectedWord,'');
  457.         return true
  458.     }
  459.     
  460.     /**
  461.      * Makes the request to URL site and opens and calls 'responseDCHandler' which opens a window
  462.      * @param {} url
  463.      * @param {} parameters
  464.      * @return {Boolean}
  465.      */
  466.     function makeDCRequest(url, parameters) {
  467.        http_request = false;
  468.        http_request = new XMLHttpRequest();
  469.        
  470.        
  471.     
  472.        if (http_request.overrideMimeType) {
  473.           http_request.overrideMimeType('text/xml; charset=iso-8859-2');      
  474.        }
  475.        if (!http_request) {
  476.           //alert('DictCheck: Cannot create XMLHTTP instance');
  477.              dumpe('DictCheck: Cannot create XMLHTTP instance');
  478.           return false;
  479.        }
  480.        http_request.onreadystatechange = responseDCHandler;
  481.        http_request.open('GET', url + parameters, true);
  482.     //   http_request.setRequestHeader("Accept-Language", "pl");
  483.     //   http_request.setRequestHeader("Accept-Charset", "iso-8859-1");
  484.        
  485.        http_request.send(null);
  486.        dumpi("makeDCRequest");
  487.        return true;
  488.        
  489.     }
  490.     
  491.     function filterAngoolPage(temp){
  492.              temp = temp.replace(/\r\n|\n|\r/g,'');
  493.     //       temp = temp.replace(/\n/g,'');
  494.     //       temp = temp.replace(/\/>/g,'\n');
  495.              temp = temp.replace(/<! --/g,'<!--');
  496.              temp = temp.replace(/--->>/g,'');       
  497.     //       temp = temp.replace(/<!--.*-->/g,'');
  498.     //       initTemporaryFile(DICTCHECK_TMP_FILENAME);
  499.     //       writeToTemporaryFile(temp);
  500.              temp = temp.replace(/<\/*link.*?>/g,'');
  501.     //       temp = temp.replace(/<META.*?>/g,'');
  502.     //       temp = temp.replace(/<meta.*?>/g,'');
  503.     //       temp = temp.replace(/<script.*?>/g,'');
  504.              temp = temp.replace(/<script.*?<\/script>/g,'');
  505.              temp = temp.replace(/<\/*script.*?>/g,'');      
  506.              temp = temp.replace(/<a.*?<\/a>/g,'');
  507.     //       temp = temp.replace(/href=["|'].*?["|']/g,'href=""');
  508.     //       temp = temp.replace(/src=["|'].*?["|']/g,'src=""');
  509.              temp = temp.replace(/alt=["|'].*?["|']/g,'src=""');
  510.              temp = temp.replace(/<\/*img.*?>/g,'');         
  511.     //       temp = temp.replace(/<body leftmargin="0".*?>/g,'<body leftmargin="20" width="90%" align="center">');
  512.     //       temp = temp.replace(/<table width="100%"/g,'<table width="85%"');
  513.     
  514.              temp = temp.replace(/>/g,'>\n');
  515.              return temp;
  516.     }
  517.     
  518.     function responseDCHandler(){
  519.        if (http_request==null){
  520.          //alert('http_request==null !!');
  521.          dumpe('http_request==null !!');
  522.        }
  523.        if (http_request.readyState == 4) {
  524.           if (http_request.status == 200) {
  525.              //var msg = http_request.getResponseHeader();
  526.              var msg_header = http_request.getAllResponseHeaders();
  527.              var xmlobject = http_request.responseXML;
  528.              
  529.     //       if(xmlobject.documentElement.tagName == "parsererror"){
  530.     //          var parseErrorText = xmlobject.documentElement.firstChild.data;
  531.     //            parseErrorText += "\n" + xmlobject.documentElement.firstChild.nextSibling.firstChild.data;
  532.     //            alert(parseErrorText);
  533.     //       }
  534.              
  535.              var body = xmlobject.body ;
  536.              if (body==null) dumpi('body == null');
  537.              var tabs = xmlobject.getElementsByTagName('*');
  538.     //       var tables = xmlobject.getElementsByTagName('table');
  539.              dumpi('listing [' + tabs.length + '] tables..');
  540.              for (var i=0; i<tabs.length;i++){
  541.                 dumpi('obj='+tabs[i].tagName);
  542.              }
  543.              dumpi('..end of listing');
  544.              var respText = http_request.responseText;
  545.              var temp = respText;        
  546.              initTemporaryFile("tmp.html");
  547.              writeToTemporaryFile(temp);
  548.              temp = filterAngoolPage(temp);
  549.              initTemporaryFile("tmp2.html");
  550.              writeToTemporaryFile(temp);
  551.              
  552.     
  553.                      
  554.     
  555.     
  556.     //       var nodeList = xmlobject.childNodes;
  557.     //       var contType = xmlobject.contentType;
  558.              dumpd('responseDCHandler()');         
  559.              msg = selectedWord + '\n-------\n';
  560.              msg = msg+'---HEADER---\n'
  561.                     +msg_header
  562.                     +'\n---';
  563.                     msg = msg+'\n---RESP_TEXT---\n'
  564.                     +respText
  565.                     +'\n---';
  566.     //         dumpd(msg);
  567.              openMyIFrameInfoDialog(selectedWord,'',msg) ;
  568.     //       openMyIFrameInfoDialog(selectedWord, respText) ;        
  569.           } else {
  570.              //alert('There was a problem with the request.');
  571.              dumpe('There was a problem with the request.');
  572.           }
  573.        }    
  574.     }
  575.     
  576.     
  577.     function initDirectoryForSaving()
  578.     {   
  579.         var ok = false;
  580.         try
  581.         {
  582.             extFolder = Components.classes["@mozilla.org/file/directory_service;1"]
  583.                     .getService(Components.interfaces.nsIProperties)
  584.                     .get("ProfD", Components.interfaces.nsIFile); 
  585.             extFolder.append("dictCheck");
  586.             if( !extFolder.exists() || !extFolder.isDirectory() ) {   // if it doesn't exist, create
  587.                 extFolder.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0755);
  588.             }
  589.             ok = true;
  590.         }
  591.         catch (ex)
  592.         {
  593.             //alert(ex);
  594.             dumpe(ex);
  595.         }
  596.         return ok;
  597.     }
  598.     
  599.     
  600.     function initTemporaryFile(fileName){
  601.     //  dictCheckTMPfile = Components.classes["@mozilla.org/file/local;1"]
  602.     //                                     .createInstance(Components.interfaces.nsILocalFile);
  603.     //  dictCheckTMPfile.initWithPath(extFolder.path+"//.tmp");
  604.         dumpi('initTemporaryFile('+fileName+')');
  605.         if (dictCheckTMPfile == null){
  606.     //      dumpi('dictCheckTMPfile == null');
  607.             if(extFolder == null){      
  608.     //          dumpi('extFolder == null');
  609.                 if(!initDirectoryForSaving()){
  610.                     dumpe('ExtFolder was not initialized!');
  611.                 }
  612.             }                       
  613.         }
  614.         dictCheckTMPfile = extFolder.clone();
  615.         dictCheckTMPfile.append(fileName);
  616.         if (dictCheckTMPfile.exists()){ 
  617.     //      dictCheckTMPfile.remove(true);
  618.             dumpi('file ['+fileName+'] already exists!');
  619.         }
  620.         else {
  621.             dictCheckTMPfile.create(dictCheckTMPfile.NORMAL_FILE_TYPE, 0600);   
  622.         }
  623.         dumpi('dictCheckTMPfile='+dictCheckTMPfile.path);
  624.     }
  625.     
  626.     function writeToTemporaryFile(txt){
  627.         // First, get and initialize the converter
  628.         var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
  629.                                   .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
  630.         converter.charset = "iso-8859-2";//"UTF-8"; //TODO to set it as parameter to function
  631.         txt = converter.ConvertFromUnicode(txt);
  632.     
  633.         var stream = Components.classes['@mozilla.org/network/file-output-stream;1']
  634.                                .createInstance(Components.interfaces.nsIFileOutputStream);
  635.        //PR_RDONLY          0x01 Open for reading only.
  636.        //PR_WRONLY          0x02 Open for writing only.
  637.        //PR_RDWR            0x04 Open for reading and writing.
  638.        //PR_CREATE_FILE     0x08 If the file does not exist, the file is created. If the file exists, this flag has no effect.
  639.        //PR_APPEND          0x10 The file pointer is set to the end of the file prior to each write.
  640.        //PR_TRUNCATE        0x20 If the file exists, its length is truncated to 0.
  641.        //PR_SYNC            0x40 If set, each write will wait for both the file data and file status to be physically updated.
  642.        //PR_EXCL            0x80 With PR_CREATE_FILE, if the file does not exist, the file is created. If the file already exists, no action and NULL is returned. 
  643.         stream.init(dictCheckTMPfile, 0x02 | 0x08 | 0x20, 0666, false); 
  644.         stream.write(txt,txt.length);       
  645.         stream.close();
  646.     }
  647.     
  648.     function setGlobals(){
  649.         dumpi('start->setGlobals()');
  650.         getHandleForDialogWindow();
  651.         initDirectoryForSaving();
  652.         initTemporaryFile(DICTCHECK_TMP_FILENAME);
  653.     }
  654.     
  655.     function getHandleForDialogWindow(){
  656.         //  dumpi('1');
  657.         var windowsMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
  658.     //    dumpi('2');    
  659.     //    win = windowsMediator.getMostRecentWindow('');
  660.         var win_enum = windowsMediator.getEnumerator(null);
  661.         var win = null ; 
  662.         while(win_enum.hasMoreElements()){
  663.             dumpi('in the loop');
  664.             win = win_enum.getNext();
  665.     //      dumpi('enum, id='+win.id);
  666.     //      dumpi('enum, name='+win.name);
  667.             if (win.name==WIND_NAME){
  668.                 w = win;
  669.                 break;
  670.             }
  671.         }
  672.         return w;
  673.     }
  674.     
  675.     function setWindowListeners(){
  676.         if (!w) {
  677.             dumpe('w is not available');
  678.             return false;
  679.         }   
  680.         return true;
  681.     }
  682.     
  683.     
  684.     function listElementsOfDocument(doc){       
  685.         if (doc==null){
  686.             dumpe('Listing Elements: Doc == null!');
  687.             return false;
  688.         }
  689.         if (!(doc instanceof Document)){
  690.             dumpw('Listing Elements: Doc is not of type "Document"!');
  691.             return false;
  692.         }
  693.         var list = doc.getElementsByTagName('*');
  694.         dumpi('---Elements of ['+doc.nodeName+']');
  695.         for (var i=0; i<list.length;i++){
  696.             dumpi('el='+list[i].tagName+' id='+list[i].id);
  697.         }
  698.         dumpi('---');
  699.         return true;
  700.     }
  701.     
  702.     function onLoad(){
  703.         dumpi('window opener href: '+window.opener.location.href);
  704.         setGlobals();
  705.         modifyMyWindow();
  706.         setWindowListeners();
  707.     }
  708.  
  709.     ///****************************
  710.     // public memebers and methods 
  711.     ///****************************
  712.     return {
  713.         // variables
  714.         
  715.         w:w,
  716.         selectedWord:selectedWord,
  717.         http_request:http_request,
  718.         
  719.         //functions
  720.         
  721.         setGlobals:setGlobals,
  722.         modifyMyWindow:modifyMyWindow,
  723.         setWindowListeners:setWindowListeners,
  724.         getSelectedTextAndOpenWindow:getSelectedTextAndOpenWindow,
  725.         getSelectedTextAndOpenWindowForFF:getSelectedTextAndOpenWindowForFF,
  726.         showMyAbout:showMyAbout,
  727.         searchForNewWord:searchForNewWord,
  728.         startResizingMyInfoDialog:startResizingMyInfoDialog,
  729.         onLoad:onLoad
  730.         
  731.     }
  732.     //-----------------------------
  733.     
  734. ///****************************
  735. // end of com.ksla.iframe
  736. ///****************************
  737. }();
  738.  
  739. //addEventListener("load", onLoad, true);